package fr.emn.fil.soc.gr3.views;

import java.awt.BorderLayout;
import java.awt.FlowLayout;
import java.awt.SystemColor;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JSeparator;
import javax.swing.JTextArea;
import javax.swing.SwingConstants;
import javax.swing.border.EmptyBorder;

import org.apache.log4j.LogManager;
import org.apache.log4j.Logger;

import fr.emn.fil.soc.gr3.controllers.MainFrameController;
import fr.emn.fil.soc.gr3.controllers.enums.EnumMainFrameController;
import fr.emn.fil.soc.gr3.entites.Compte;

public class MainFrame extends JFrame {

	/**
	 * 
	 */
	private static final long serialVersionUID = 7636320117372066812L;
	
	private JMenuBar menuBar = new JMenuBar();
	private JMenu mnFichier = new JMenu("Fichier");
	private JMenuItem mntmInscription = new JMenuItem("Inscription");
	private JMenuItem mntmQuitter = new JMenuItem("Quitter");
	private JMenu mnSujets = new JMenu("Sujets");
	private JMenuItem mntmListeDesSujets = new JMenuItem("Liste des sujets");
	private JMenuItem mntmRcuprerUnSujet = new JMenuItem("R\u00E9cup\u00E9rer un sujet");
	private JMenuItem mntmDeposerSujet = new JMenuItem("D\u00E9poser un sujet");
	
	private JButton btnConnexion = new JButton("Connexion");
	private JButton btnQuitter = new JButton("Quitter");
	private JLabel lblConsole = new JLabel("Console");
	private JScrollPane scrollPane_console = new JScrollPane();
	private JTextArea textArea_console = new JTextArea();
	private JPanel contentPane;
	
	private Compte compteCourant;
	
	static Logger log = LogManager.getLogger(MainFrame.class);
	
	//DIALOGS
	private DialogConnexion dialogConnexion;
	private DialogListeSujets dialogListeSujets;
	private DialogRecupererSujet dialogRecupererSujets;
	
	public MainFrame() {

		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(800, 600);
		setLocationRelativeTo(null);
		
		buildMenu();
		
		contentPane = new JPanel();
		contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
		setContentPane(contentPane);
		contentPane.setLayout(new BorderLayout(0, 0));
		
		JPanel panel = new JPanel();
		contentPane.add(panel, BorderLayout.SOUTH);
		panel.setLayout(new FlowLayout(FlowLayout.RIGHT, 5, 5));
		
		panel.add(btnConnexion);
		
		panel.add(btnQuitter);
		
		lblConsole.setHorizontalAlignment(SwingConstants.CENTER);
		contentPane.add(lblConsole, BorderLayout.NORTH);
		
		contentPane.add(scrollPane_console, BorderLayout.CENTER);
		
		textArea_console.setEditable(false);
		textArea_console.setBackground(SystemColor.info);
		scrollPane_console.setViewportView(textArea_console);
		ConsoleAppender.setTextArea(textArea_console);
		
		//init Dialogs
		dialogConnexion = new DialogConnexion(this);
		dialogListeSujets = new DialogListeSujets(this);
		dialogRecupererSujets = new DialogRecupererSujet(this);
		
		
		setActions();
	}

	private void buildMenu() {
		setJMenuBar(menuBar);
		
		menuBar.add(mnFichier);
		
		mnFichier.add(mntmInscription);
		
		JSeparator separator = new JSeparator();
		mnFichier.add(separator);
		
		mnFichier.add(mntmQuitter);
		
		menuBar.add(mnSujets);
		
		mnSujets.add(mntmListeDesSujets);
		
		mnSujets.add(mntmRcuprerUnSujet);
		
		mnSujets.add(mntmDeposerSujet);
	}

	private void setActions() {
		mntmInscription.addActionListener(new MainFrameController(this, EnumMainFrameController.MENU_INSCRIPTION));
		mntmQuitter.addActionListener(new MainFrameController(this, EnumMainFrameController.MENU_QUITTER));
		btnConnexion.addActionListener(new MainFrameController(this, EnumMainFrameController.BTN_CONNEXION));
		btnQuitter.addActionListener(new MainFrameController(this, EnumMainFrameController.BTN_QUITTER));
		mntmListeDesSujets.addActionListener(new MainFrameController(this, EnumMainFrameController.MENU_LISTE_SUJET));
		mntmDeposerSujet.addActionListener(new MainFrameController(this, EnumMainFrameController.MENU_DEPOSER_SUJET));
		mntmRcuprerUnSujet.addActionListener(new MainFrameController(this, EnumMainFrameController.MENU_RECUPERER_SUJET));
	}

	public JMenuItem getMntmInscription() {
		return mntmInscription;
	}

	public JMenuItem getMntmQuitter() {
		return mntmQuitter;
	}

	public JButton getBtnConnexion() {
		return btnConnexion;
	}

	public JButton getBtnQuitter() {
		return btnQuitter;
	}

	public JTextArea getTextArea_console() {
		return textArea_console;
	}

	public DialogConnexion getDialogConnexion() {
		return dialogConnexion;
	}

	public Compte getCompteCourant() {
		return compteCourant;
	}

	public void setCompteCourant(Compte compteCourant) {
		this.compteCourant = compteCourant;
	}

	public void setStateApplication() {
		if(compteCourant != null){
			log.info("Bienvenue "+compteCourant.getLogin());
			log.info("Type compte : "+compteCourant.getType());
		}else{
			log.info("Une erreur s'est produite lors de l'authentification");
		}
		
	}

	public DialogListeSujets getDialogListeSujets() {
		return dialogListeSujets;
	}

}
